let path = require('path')
let webpack = require('webpack')
const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
const packageInfo = require('./package.json');
/*包大小分析工具*/
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
const isBuildAll = process.env.NODE_ENV == 'BuildAll' ? true : false
const isPublishClient = process.env.NODE_ENV == 'client' ? true : false
const isPublishAgent = process.env.NODE_ENV == 'agent' ? true : false
const isPublishMini = process.env.NODE_ENV == 'mini' ? true : false
const target = isPublishAgent ? 'node' : 'web'
const entry = isPublishClient ? './src/index.js' : isPublishAgent ? './src/ivcsAgent_index.js' : './src/index_mini.js'
const externals = isPublishMini ? {"./socket.io":'io'} : {}
const rules = isPublishMini ? [] : [
    {
      test: /\.(js|ts)$/,
      use: { loader: "babel-loader" },
      exclude: /node_modules/,
    }
  ]

module.exports = [
    // 未压缩版
    {
        target: target,
        mode: 'production',
        entry: {
            'ivcs': entry
        },
        output: {
            path: path.resolve(__dirname, 'dist/publish'),
            filename: '[name].js',
            library: 'ivcs',
            libraryTarget: "umd"
        },
        module: {
            rules: rules,
          },
        externals:externals,
        plugins:[
            new webpack.BannerPlugin({
                entryOnly: true, // 是否仅在入口包中输出 banner 信息
                banner: 'Zealcomm IVCS SDK'
                + `\n`
                + `Version ${packageInfo.version}`
                + `\n`
                + `Author: ${packageInfo.author}`
                + `\n`
                + `Date: ${new Date()}`
            }),
        ]
    },

    // 压缩版
    {
        target: target,
        mode: 'production',
        entry: {
            'ivcs.min': entry
        },
        output: {
            path: path.resolve(__dirname, 'dist/publish'),
            filename: '[name].js',
            library: 'ivcs',
            libraryTarget: "umd"
        },
        module: {
            rules: rules,
          },
        externals:externals,
        plugins: [
            new webpack.BannerPlugin({
                entryOnly: true, // 是否仅在入口包中输出 banner 信息
                banner: 'Zealcomm IVCS SDK'
                + `\n`
                + `Version ${packageInfo.version}`
                + `\n`
                + `Author: ${packageInfo.author}`
                + `\n`
                + `Date: ${new Date()}`
            }),
            new webpack.DefinePlugin({
                'process.env':{
                    'NODE_ENV': JSON.stringify("production")
                }
            }),
            new UglifyJsPlugin({
                uglifyOptions: {
                    compress: {
                        warnings: false,
                        drop_console: true,//console
                    }
                },
                sourceMap: true,
                parallel: true
            }),
            new BundleAnalyzerPlugin({
                //  可以是`server`，`static`或`disabled`。
                //  在`server`模式下，分析器将启动HTTP服务器来显示软件包报告。
                //  在“静态”模式下，会生成带有报告的单个HTML文件。
                //  在`disabled`模式下，你可以使用这个插件来将`generateStatsFile`设置为`true`来生成Webpack Stats JSON文件。
                analyzerMode: isBuildAll ? 'disabled' : 'server',
                //  将在“服务器”模式下使用的主机启动HTTP服务器。
                analyzerHost: '127.0.0.1',
                //  将在“服务器”模式下使用的端口启动HTTP服务器。
                analyzerPort: 8888,
                //  路径捆绑，将在`static`模式下生成的报告文件。
                //  相对于捆绑输出目录。
                reportFilename: 'report.html',
                //  模块大小默认显示在报告中。
                //  应该是`stat`，`parsed`或者`gzip`中的一个。
                //  有关更多信息，请参见“定义”一节。
                defaultSizes: 'parsed',
                //  在默认浏览器中自动打开报告
                openAnalyzer: false,
                //  如果为true，则Webpack Stats JSON文件将在bundle输出目录中生成
                generateStatsFile: false,
                //  如果`generateStatsFile`为`true`，将会生成Webpack Stats JSON文件的名字。
                //  相对于捆绑输出目录。
                statsFilename: 'stats.json',
                //  stats.toJson（）方法的选项。
                //  例如，您可以使用`source：false`选项排除统计文件中模块的来源。
                //  在这里查看更多选项：https：  //github.com/webpack/webpack/blob/webpack-1/lib/Stats.js#L21
                statsOptions: null,
                logLevel: 'info' // 日志级别。可以是'信息'，'警告'，'错误'或'沉默'。
            })
        ]
    }
]
